package com.imooc.pan.file.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.imooc.pan.core.constants.RPanConstants;
import com.imooc.pan.file.converter.FileConverter;
import com.imooc.pan.file.entity.FileMessage;
import com.imooc.pan.file.entity.RPanUserFile;
import com.imooc.pan.file.mapper.FileMessageMapper;
import com.imooc.pan.file.service.FileMessageService;
import com.imooc.pan.file.service.IUserFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author Janson
 * @Description TODO
 * @Date 2023/7/28
 */
@Service
@Slf4j
public class FileMessageServiceImpl extends ServiceImpl<FileMessageMapper, FileMessage> implements FileMessageService {
    
    @Autowired
    private FileConverter fileConverter;
    
    @Autowired
    private IUserFileService userFileService;
    
    /**
     * 一条消息插入 mq消息表
     * @param recond
     * @param mqFlag
     */
    @Override
    public void insertMessage(RPanUserFile recond, Integer mqFlag) {
        FileMessage fileMessage = fileConverter.rPanUserFile2FileMessage(recond);
        // 操作标记 （0，新增；1，修改，2，删除）
        fileMessage.setMqFlag(mqFlag);
        fileMessage.setRetryCount(0);
        // 查询父文件夹
        String parentFilename = getParentFilename(recond);
        fileMessage.setParentFilename(parentFilename);
        baseMapper.insert(fileMessage);
    }
    
    /**
     * 多条消息插入mq消息表
     * @param userFileList
     * @param mqFlag
     */
    @Override
    public void insertMessageList(List<RPanUserFile> userFileList, Integer mqFlag) {
        List<FileMessage> fileMessageList = userFileList.stream().map(userFile -> {
            FileMessage fileMessage = fileConverter.rPanUserFile2FileMessage(userFile);
            // 操作标记 （0，新增；1，修改，2，删除）
            fileMessage.setMqFlag(mqFlag);
            fileMessage.setRetryCount(0);
            // 查询父文件夹
            String parentFilename = getParentFilename(userFile);
            fileMessage.setParentFilename(parentFilename);
            return fileMessage;
        }).collect(Collectors.toList());
        // 保存全部消息
        this.saveBatch(fileMessageList);
    }
    
    /*************************************私有方法**************************************/
    private String getParentFilename(RPanUserFile recond){
        if (Objects.isNull(recond.getParentId())){
             recond = userFileService.getById(recond.getFileId());
        }
        RPanUserFile userFile = userFileService.getById(recond.getParentId());
        if (Objects.isNull(userFile) || userFile.getFolderFlag().equals(RPanConstants.ZERO_INT)){
            if (recond.getParentId() == 0){
                return "";
            }
            log.error("文件名称：{}，文件id：{} 不存在父文件夹，请人工核查,父文件夹id:{}",recond.getFilename(),recond.getFileId(),recond.getParentId());
        }
        return userFile.getFilename();
    }
}
